perm filename MSS.F4[NEW,LCS]7 blob
sn#169973 filedate 1975-07-20 generic text, type T, neo UTF8
00100 C ********** DISPLAYS MUSIC AND DRAWS IT ON THE PLOTTER **********
00200 C *** READS DATA FROM CLEF0, BDR40,BDI40, ETC.
00300
00400 IMPLICIT INTEGER(A-Q,S-Z)
00500 REAL DIS,PWDS,DISX,A,B,STFF,CENTR,POS
00600 COMMON /DL/X22,SAVER,NAME/RRJJ/RJJ2,RJJ(20) /FONT/JFONT
00700 DIMENSION RPOS(2,40),LST(13),DP(-3/4),LX(14),LY(6),R(8,100)
00800 COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK/SIZ/RSZ,JCEN,KCEN
00900 COMMON/SCM/V(78),ISCR,LCNT,RSTF,LIST(200),REND
01000 COMMON/ALF/INP(72),ML/STF/RSTFAC(-3/4),RSTJ2
01050 1/POSI/STFF(-3/4),JJ2,POS
01100 COMMON /PLTR/PLT,RHT,DIS/PTR/PWDS(250),ITEM,L,I,IX
01200 COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
01300 COMMON/XRN/RN(4000)/DPY/ST(4000),WDS(250),MEDIT,IGO
01400 EQUIVALENCE (J3,JQ(1)),(J4,JQ(2)),(J5,JQ(3)),(R5,RJQ(3))
01500 1,(R6,RJQ(4)),(J7,JQ(5)),(J8,JQ(6)),(J9,JQ(7)),(J10,JQ(8))
01600 1,(J11,JQ(9)),(J6,JQ(4)),(R7,RJQ(5)),(R4,RJQ(2)),(IT,LY(6))
01700 1,(R3,RJQ(1)),(I2,INP(2)),(I1,INP(1)),(LX(8),IL),(I3,INP(3))
01800 1,(R11,RJQ(9)),(NJR,R10,RJQ(8)),(RSET4,RN(3920)),(R,RN(3001))
01900 1 ,(TOP,ST(3999)),(BOT,ST(4000)),(R8,RJQ(6)),(RJ3,RJJ(1))
01950 1 ,(R9,RJQ(7)),(IBEAM,RN(3000))
02000 1,(RPOS(1,1),RN(3921)),(ST2,ST(2)),(IBL,LY(1)),(R13,RJQ(11))
02100 1,(IE,LX(4)),(IP,LX(10)),(IM,LX(9)),(II,LX(6)),(IS,LX(12))
02110 1,(LX(2),ICC),(LX(5),IG)
02200 DATA STFF/-369.0,-246.0,-123.0,0.0,123.0,246.0,369.0,450.0/
02300 1 ,LST/'NOTE','REST','CLEF','LINE','SLUR',
02400 1 'BEAM','TRILL','STAFF','MISC','NUMB','WORD','KSIG','METER'/
02500 1,DP/8*1/,LX/'A','C','D','E','G','I','J','L','M','P','R',
02600 1 'S','U','X'/
02700 1,LY/' ','A','B','D','E','T'/, DIS/1.0/
02800
02860 LCEN=0
02870 MCEN=0
02900 CP TOP2=-999
03050 C IF -1, THEN TRUE OUTLINES OF FONTS ARE DISPLAYED.
03100 I1=0
03120 CP DIS=1.
03140 CP RHT=1.
03160 C FOR 'FILLER' ON CRT.
03300 2 CALL DPYSET(1,ST,4000)
03310 CALL HYDPOG(1)
03400 CALL TYPLOC(-180,-511)
03500 CALL DPYBRT(5)
03510 JFONT=0
03520 RSET4=999
03600 RPOS(1,1)=0
03700 CP PLOTIT=0
03800 RSZ=.845
03900 CP TOP=-999
04000 CP BOT=999
04200 X22=0
04300 JCEN=0
04400 KCEN=0
04500 PLT=0
04600 PWDS(1)=1.
04700 EDX=-1
04750 RN(2)=0
04775 C FOR RESTART. AVOIDS STAFF CODE NUM.
04800 SAVER=7
04900 DO 1402 K=-3,4
05000 1402 RSTFAC(K)=1.
05100 REDIT=999.
05200 M=1
05300 ITEM=0
05400 ZERO=-1
05500 WDS(1)=4
05600 C DATA IN DPY ARRAY STARTS AT WD.4!
05700 I=1
05800 1100 SCORE=-1
07200 58 IGO=-1
07210 IF(I1.NE.'R')GO TO 5505
07250 CALL FORMAT(NAME)
07275 IF(NAME.NE.IBL)GO TO 1221
07287 C YOU CAN TYPE 'RS NAME' FOR QUICK RESTARTS
07300 GO TO 5505
07400
07600 11 CALL NOTWRT
07700 CP57 IF(PLT)GO TO 6120
07710 57 IF(M.GT.I)GO TO 571
07800 IF(IGO)CALL DPYOUT(1)
08000 571 ITEM=ITEM+1
08010 IF(ITEM.LT.250)GO TO 17
08020 TYPE 170,ITEM
08030 I=PWDS(250)
08040 ITEM=249
08050 ST2=WDS(250)
08055 CALL DPYOUT(1)
08060 GO TO 1100
08070 170 FORMAT(2(' **** TOO MANY ITEMS ',I3,'/249'/))
08100 17 IF(IGO.GT.0)GO TO 20000
08200 K=ST2
08300 IF(X22.EQ.0)GO TO 20000
08400 CALL BOX(IBOX,RBOX,STFF)
08500 ST2=K
08600 20000 WDS(ITEM+1)=ST2
08610 IF(EDX.EQ.-1)GO TO 1571
08700 IF(M.LT.I)GO TO 6120
08800 CP1571 IF(PLOTIT.EQ.-2)GO TO 2311
08900 C SL=SAVE AFTER RESETTING LENGTH OF PAGE. (SEE I2 IN SCX)
09000 1571 PWDS(ITEM+1)=I
09100 PLT=0
09200 IF(IGO.NE.0)GO TO 55
09300 CALL DPYOUT(1)
09310 IF(SCORE.EQ.0)GO TO 9532
09355 C GO GET MORE FROM SCX.
09400 IGO=-1
09500
10200 55 IF(SCORE.EQ.0)GO TO 553
10300 5505 SVST=ST2
10400 C CATCHES TYPO WITH 'C'
10500 K=ITEM+1
10600 IF(X22.EQ.0)GO TO 5503
10700 K=X22
10800 L=RN(MEDIT+1)
10900 IF(L.EQ.13)L=11
10910 CC IF(L.EQ.10)L=9
11000 CC IF(L.GE.16.AND.L.LE.18)L=L-5
11020 IF(L.GE.11)L=L-1
11040 IF(L.GE.15)L=L-4
11100 CC IF(L.EQ.20)L=12
11400 TYPE 427,LST(L),(RN(L),L=MEDIT+1,MEDIT+3)
11500 IF(YED.LT.2)GO TO 59
11505 CP IF(YED.LT.2)GO TO 5504
11600 C YED IS SET AT 426
11700 5502 DO 5501 L=4,YED+2
11800 5501 TYPE 4271,L,RN(MEDIT+L)
11900 CP GO TO 5504
12000 GO TO 59
12300
12400 5503 CALL HYDPOG(3)
12500 C TO DELETE VERTICAL LINE (55)
12600 KED=0
12900 CP5504 IF(I1.EQ.IP)GO TO 2311
13000 59 TYPE 56,NAME,K,I,SVST
13100 JAB=JA
13200 SCORE=-1
13300 ACCEPT 89,INP
13400 DO 1313 L=1,14
13500 1313 IF(I1.EQ.LX(L))GO TO 2313
13600 GO TO 87
13800 C 'SA'=SAVE; 'S'=SET; 'SB'=SAVE BIG; 'ST'=STAFF;
13900 2313 IF(X22.NE.0)GO TO(884,883,883,5313,87,884,87,883,87,59,883
14000 1,15,883,883),L
14090 CP GO TO(87,13,7555,14,5313,120,884,7555,883,7555,311,883,15,883
14100 GO TO(13,7555,14,5313,120,884,7555,883,7555,59,883,15,883
14200 1,59),L
14300 C A C D E G I J L M P R S U(X
14400 C HERE A=ALTER A GROUP, DE=DELETE A GROUP
14500 C 'DP'=DISPLAY OR HIDE WHICH STAVES. D=DOWN N
14600 14 IF(I2-IE)883,13,884
14700 13 IGO=1
14800 CALL GRED
14850 JFONT=0
14900 IF(JA.EQ.98)GO TO 5533
15000 KNT=0
15100 SCORE=0
15250 GO TO 653
15300 15 DO 3313 L=1,6
15400 3313 IF(I2.EQ.LY(L))GO TO(312,3121,3121,3121,312,884),L
15500 C BL A B D E T
16000 3121 IF(X22.NE.0)GO TO 5505
16100 SAVER=7
16200 CALL SAVIT
16300 GO TO 5505
16400 312 JA=55
16500 R2=RN(MEDIT+3)
16550 C POSITION OF ITEM LOOKED AT.
16600 R3=55.
16700 GO TO 6531
16800 C ABOVE FOR 'S'ET ALIGNMENT
16900 C 'S'=SET ALIGNMENT, 'A'=ALIGN IT. 'M'=MOVER 'C'= COPIER
17000 C 'E'=EDIT; 'I'=ITEM; 'G'=GET; 'GM'=GET MORE; 'P' #S = PLOT IT
17100 5313 K=-1
17200 DO 882 JA=3,10
17300 882 IF(INP(JA).NE.IBL)GO TO 884
17400 GO TO 883
17500 885 FORMAT(A2,21F)
17600 884 REREAD 885,K,R2,RJQ
17700 JA=55
17800 IF(I1.EQ.II)JA=22
17900 IF(I2.EQ.IT)JA=44
18000 IF(I2.NE.IP)GO TO 6531
18100 IF(R2.GT.5)GO TO 1886
18200 C GO BACK AND RESET ALL
18300 K=R2
18400 JA=0
18500 C USE '5' FOR STAFF 0.
18600 888 IF(K.EQ.5)K=0
18700 DP(K)=-DP(K)
18800 JA=JA+1
18900 K=RJQ(JA)
19050 IF(K.EQ.0)GO TO 55
19100 C JUMP OUT IF RJQ(JA)=0 OR 99
19150 IF(K.EQ.99)GO TO 85
19175 C*** 3/74 END WITH '99' TO MAKE DP RIGHT NOW!
19200 GO TO 888
19300 C TO GET BACK ALL LINES TYPE 6+
19400 311 JA=0
19410 IGO=1
19500 ML=0
19600 IF(I2.NE.IL)GO TO 884
19700 1886 DO 2886 K=-3,4
19800 2886 DP(K)=1
19875 GO TO 85
19900 CP IF(I1.NE.IP)GO TO 8851
20000 C PL RESETS 'DP'
20100 C TO GET BACK OTHERS - 'DPY N' AGAIN WILL DO.
20200 CP2311 CALL PLTCMD
20300 CP IF(PLOTIT.EQ.0)GO TO 3005
20400 CP I1=IP
20500 CP PLOTIT=-1
20600 CP GO TO 6531
20700 C 'PL' GOES TO 'PLOT COMMAND' ROUTINE
20800
20900 881 IF(I1.GT.0)GO TO 87
21000 C JUMP IF I1 IS NOT A LETTER (K>0=NUM, K<0=LET.)
21100 883 IF(I2.EQ.IS)GO TO 2
21200 C TYPE 'RS' TO RESTART.
21210 IF(IX.NE.I)GO TO 8831
21300 IF(I1.EQ.ICC)GO TO 72
21320 8831 IF(JA.NE.16)GO TO 8832
21330 IF(X22.EQ.0)GO TO 5505
21340 C CAN'T MOVE LETTERS OR 'SCORE' ENTRIES UNLESS REALLY IN EDIT MODE!
21400 8832 CALL EDIT(JJA)
21500 IF(JA.NE.99)GO TO 6531
21520 CALL DELETE
21540 C DELETE ROUTINE COULD BE PUT DIRECTLY IN HERE.
21560 GO TO 425
21600 89 FORMAT(72A1)
21700 C TYPE L, R, U OR D OR EDIT TO MOVE LAST ENTERED ITEM.
21710
21720 101 CALL SCL
21730 GO TO 5505
21740 221 JFONT=R2
21750 C JA=44 IS FOR JFONT (DISPLAY FONT OUTLINES)-WIPED OUT BY '24' ETC.
21760 GO TO 5505
21770 440 RSET4=R2
21780 C SETS "SETUP" STAFF NUMBER
21790 GO TO 5505
21800
21900 87 REREAD 1,JA,R2,RJQ
22000 IF(K)JA=55
22100 C ED 47 -1 = 55 47 -1, ETC.
22200 IF(JA.EQ.101)GO TO 101
22220 IF(JA.EQ.44)GO TO 221
22225 IF(JA.EQ.444)GO TO 440
22230 IF(JA.EQ.14)GO TO 88
22235 C IS THERE A BUG CONCERNING SAVIT AND 'SCORE'????
22240 IF(JA.EQ.144)GO TO 88
22300 IF(JA.GT.0)SAVER=SAVER-1
22310 IF(X22.NE.0)GO TO 6531
22312 IF(JA.EQ.0)GO TO 5505
22356 C CATCHES ZEROS AND LOWER CASE LETTERS.
22400 IF(SAVER)CALL SAVIT
22500 C SAVES EVERY 7TH TIME AROUND
22610 CC8833 IF(JA.EQ.14)GO TO 88
22655 CC IF(JA.EQ.144)GO TO 88
22700 8833 IF(JA.NE.16)GO TO 6531
22710 C NEXT FOR ALPHA TEXT ITEMS.
22720 M=I
22730 CALL WORDS
22740 GO TO 8852
22750
22800 188 R3=0
23000 CC88 SET4=R3
23100 C *** THIS FEATURE CHNGD. 6/75***SET4 IS NEG. FOR AUTOMATIC STAFF 4 SETUP.
23110 88 SCORE=0
23200 IF(JA.NE.14)GO TO 889
23300 C NEXT PUTS UP STAFF IF IT WASN'T THERE ALREADY
23400 SAVER=-1
23410 RSTF=R2
23420 IF(R3)R3=0
23500 DO 1889 K=1,ITEM
23600 J=PWDS(K)
23700 IF(RN(J+1).NE.8)GO TO 1889
23800 IF(RN(J+2).EQ.R2)GO TO 890
23900 1889 CONTINUE
24000 C DIDN'T FIND THIS STAFF
24100 M=2000
24120 IGO=0
24200 JA=8
24300 GO TO 6531
24320 890 JA=14
24340 ITCHK=ITEM
24360 ICHK=I
24380 IDPY=ST2
24400 C ALL THIS FOR BACKUPS
24450 889 SPD=ST2
24460 JIT=ITEM
24500 ISC=I
24510 REND=0
24700 C RETAINS ORIGINS OF SCORE SQUENCE
24800 9532 IF(REND.EQ.2)GO TO 889
24850 C FOR READIN CONTINUATION.
24900 M=ISC
24905 9533 IF(JA.EQ.8)GO TO 890
24910 IF(REND)GO TO 9535
24955 C REND=0 GO, -1=NORMAL END, 1=ABORTED
25000 CALL SCMSS
25100 IF(REND.EQ.1)GO TO 9535
25110 IF(REND.NE.99)GO TO 9534
25111 CC I=ISC
25113 I=ICHK
25115 ITEM=ITCHK
25116 ST2=IDPY
25117 CALL ACCPOG(1)
25118 CALL DPYOUT(1)
25119 GO TO 9535
25120 9534 ITEM=JIT
25130 J=M
25140 9536 ITEM=ITEM+1
25150 PWDS(ITEM)=J
25160 J=J+RN(J)+3
25170 IF(J.LT.I)GO TO 9536
25180 IF(IBEAM)GO TO 9537
25182 R13=0
25185 R2=RSTF
25186 JA=19
25187 J3=0
25189 CALL HOMER
25190 9537 ITEM=JIT
26012 ST2=SPD
26075 GO TO 8852
26200 9535 SCORE=-1
26220 IGO=-1
26260 JA=16
26280 C FOR TRAP AT 'EDIT'
26290 GO TO 5505
26295
26300 553 IF(SCORE)GO TO 6531
26600 653 KNT=KNT+1
26700 C NUM OF ITEMS IN LIST
26800 R11=0
26900 R10=0
27000 R9=0
27100 64 JA=R(1,KNT)
27200 264 R2=R(2,KNT)
27300 IF(JA.NE.0)GO TO 550
27350 C =0 MEANS NO MORE ITEMS.
27700 CALL DPYOUT(1)
27900 GO TO 1100
27920
28000 5533 X22=0
28011 IGO=-1
28022 CALL DPYNEW
28033 GO TO 55
28044
28055 CP590 IF(PLOTIT.EQ.-1)GO TO 121
28066 CP I1=0
28077 CP GO TO 243
28088 C GOES TO PLOTTER
28100 550 DO 7531 K=1,6
28200 7531 RJQ(K)=R(K+2,KNT)
29500 6531 M=1
29600 EDX=-1
29700 IF(JA.EQ.222)GO TO 72
29800 IF(JA.EQ.2222)GO TO 73
29900 DO 5532 K=1,20
30000 5532 JQ(K)=RJQ(K)
30100 CC J2=R2
31300 CP7542 IF(I1.EQ.IP)GO TO 590
31400 C X22= ITEM# WHEN EDITING OR DELETING.
31500 IF(X22.NE.0)GO TO 5511
31600 IF(JA.GT.0)GO TO 155
31700 IF(R2.EQ.0)GO TO 5505
31800 C FOR UP, DOWN, LEFT, RIGHT
31850 RJJ2=J2
31900 GO TO 6221
32000 C GOES BACK IF NEGATIVE AND NOT IN EDIT MODE.
32100 155 IF(JA.EQ.24)GO TO 24
32200 IF(JA.EQ.22)GO TO 42
32300 IF(JA.EQ.44)GO TO 44
32350 C THIS '44' IS SET IN 'EDIT' - IT'S NEVER TYPED.
32400 IF(JA.EQ.55)GO TO 554
32500 IF(JA.EQ.333)GO TO 6333
33050 IF(JA.EQ.19)GO TO 61
33100 GO TO 60
00100 33 J2=R2
00200 TYPE 1,J2,RJJ(J2-2)
00500 C TYPE 33,N TO SEE FULL CONTENTS OF PARAM. N.
00600 GO TO 5505
00700
00800 24 IGO=0
00850 CALL HYDPOG(2)
00875 C TO ERASE SPACING SCALE.
00900 IF(X22.EQ.0)GO TO 23
01000 R2=RHORZ(RN(MEDIT+3))
01100 M=RN(MEDIT+2)
01200 R4=RN(MEDIT+4)*RSTFAC(M)+STFF(M)
01300 ITEM=ITEM-1
01400 C PICKS UP POINT FROM CURSOR IN 'BOX'
01500 CALL CLRCUR
01600 X22=0
01700 GO TO 241
01800 23 IF(R2.LT.100)GO TO 2410
01900 R5=AMOD(R2,100.)
02000 R2=IFIX(R2/100.)
02100 R3=1000.*R5-500.
02200 R4=R2*50.
02300 C TYPE 24 200.5 FOR 1ST HALF OF DOUBLE, 301 FOR LAST THIRD OF TRIPLE
02400 2410 IF(R2.NE.0)GO TO 241
02500 IGO=-1
02600 243 R2=1.
02700 C TO REDISPLAY WITH MAGNIFICATION - OR JUST RUN THROUGH DATA.
02800 241 RSZ=.845*R2
02900 JCEN=R3*RSZ
03000 KCEN=R4*RSZ
06200 2312 R2=0
06300 R3=0
06400 R4=0
06700 LCEN=0
06800 MCEN=0
06900 CC RJSZ=1.
07000 C IF P5 ≠ 0 GOES THROUGH DATA IN OLD WAY.
07050 JFONT=0
07100 85 M=1
07200 I=PWDS(ITEM+1)
07300 ITEM=0
07400 8552 ST2=3
07500 8852 PLT=1
07600 EDX=0
07700 CALL ACCPOG(1)
07710 IF(JA.EQ.0)GO TO 6120
07800 IF(JA.NE.24)IGO=0
07900 GO TO 6120
08000
08100 6333 CALL LISTP(LST)
08200 GO TO 5505
08300
08400 172 CALL JUGGLE
08500 CALL CLRCUR
08600 CALL DPYNEW
08700 IF(JA.EQ.22)GO TO 424
08800 C FOR MOVING DIRECTLY TO NEW ITEM IN EDIT MODE.
08900 IF(ZERO)GO TO 55
09000 X22=ZERO
09100 ZERO=-1
09200 IF(JA.EQ.55)GO TO 554
09300 IF(JA.EQ.44)GO TO 44
09400 IF(KED.NE.0)GO TO 244
09500 GO TO 425
09600
09700 C 55,POS -- SETS UP ALIGNMENT
09800 554 CALL BOX(-1,R2,STFF)
09900 IF(J4.EQ.0)KED=-1
10000 RITEM=R4
10100 C FOR 'ED POS., STF., CODE#'
10200 IF(J3.GT.4)KED=-2
10300 RLINE=R2
10400 R2=R3
10500 GO TO 45
10600
10700 C '22,0' EDITS LAST ITEM ENTERED
10800 42 REDIT=999.0
10900 IF(R2.NE.0)GO TO 242
11000 X22=ITEM
11100 GO TO 429
11200 44 KED=1
11300 RITEM=R3
11400 C 'ST', STF#, CODE# (IF 0, ALL ITEMS COME UP) - STF>4 = ALL STAVES.
11450 IF(R2.GT.4)KED=2
11500 45 REDIT=R2
11600 C THE STAFF #
11700 JED=1
11800 244 X=ITEM
11900 IF(JED.GT.X)GO TO 444
12000 DO 144 K=JED,X
12100 L=PWDS(K)
12200 IF(KED.EQ.-2)GO TO 654
12300 C -2 LOOKS AT ALL ITEMS NEAR VERT. LINE, -1 ON SINGLE STAFF.
12310 IF(KED.EQ.2)GO TO 656
12400 IF(RN(L+2).NE.REDIT)GO TO 144
12500 IF(KED)GO TO 654
12510 IF(RITEM.EQ.0)GO TO 655
12600 656 IF(RITEM.NE.RN(L+1))GO TO 144
12700 655 IF(JA.NE.55)GO TO 344
12800 654 IF(ABS(RLINE-RN(L+3)).LT.5.0)GO TO 344
12900 144 CONTINUE
13000 444 REDIT=999.
13100 C NO MORE ON LINE
13200 R2=0
13300 C SO IT WILL RETURN IF NOTHING IS FOUND WITH 'ED' OR 'ST'.
13400 GO TO 73
13500 344 JED=K+1
13600 C FOR NEXT TIME AROUND
13700 X22=K
13800 GO TO 429
13900 C CR MOVES ALONG GIVEN LINE, 222 LEAVES THIS MODE
14000
14100 91 CALL ACCPOG(1)
14200 IF(I.EQ.IX)ITEM=ITEM-1
14300 GO TO 142
14400 242 IF(X22.GT.0)GO TO 5511
14500 142 IF(R2.NE.0)GO TO 424
14510 IF(REDIT.EQ.999)GO TO 1554
14600 IF(JA.GE.0)GO TO 244
14700 1554 X22=X22+1
14800 IF(JA)X22=X22-1+JA
14900 IF(X22.LT.1)X22=1
15000 GO TO 425
15100 427 FORMAT(1XA5/,2F6.0,F10.2,$)
15200 4271 FORMAT('+ (',I2,')',F7.2,$)
15300
15400 C FOR EDITING
15500 5511 IF(JA.EQ.55)GO TO 420
15600 220 IF(JA.NE.22)GO TO 720
15700 C 'I, #' WILL MOVE TO ANOTHER ITEM WHEN ALREADY IN EDIT MODE.
15800 KED=0
15900 JED=0
16000 GO TO 72
16100 720 IF(JA.EQ.44)GO TO 420
16200 IF(JA.EQ.33)GO TO 33
16300 IF(JA.EQ.24)GO TO 24
16400 C FOR '24' WHILE IN EDIT MODE. MAGS WITH CURSOR AS CENTER.
16500 IF(MOD(JA,100).GT.13.OR.JA.EQ.1)GO TO 5505
16550 CC IF(JA.GT.13.OR.JA.EQ.1)GO TO 5505
16600 C PARAM NUM TOO HIGH?
16700 C LOOKS FOR NEXT ITEM TO EDIT IF <CR>
16800 4221 IF(X22.EQ.0)GO TO 5517
16850 IF(R2.NE.0)GO TO 5517
16900 C BACKS UP WHEN IN EDIT MODE.
17000
17100 IF(JA.GT.0)GO TO 5518
17200 IF(I.EQ.IX)GO TO 91
17300 ZERO=X22+1
17400 C '0' AFTER AN EDIT ENDS THE EDIT AND GETS NEXT ITEM FOR EDIT.
17500 72 IF(X22.EQ.0)GO TO 55
17600 IF(KED.EQ.0)REDIT=999.
17700 320 IF(I.NE.IX)GO TO 172
17800 ITEM=ITEM-1
17900 C TO DELETE AN ITEM
18000 73 X22=0
18100 CALL CLRCUR
18200 CALL DPYNEW
18300 IF(REDIT.EQ.999.)GO TO 441
18400 IF(JA.EQ.55)GO TO 554
18500 IF(JA.EQ.44)GO TO 44
18600 441 IF(R2.EQ.0.OR.R2.GT.ITEM)GO TO 55
18800 C DELETION IN EDIT MODE DOES NOT LEAVE MODE.
18900 424 X22=R2
19000 425 IF(X22.GT.ITEM)GO TO 73
19100 C LEAVES EDIT MODE.
19200 429 IX=I
19300 MEDIT=PWDS(X22)
19400 J=2
19500 426 Y=RN(MEDIT)+J
19601 CALL LOOP(0,Y,1,I,MEDIT,RN)
19700 JJA=RN(I+1)
19800 YED=Y-2
19900 L=I+2
20000 DO 422 K=1,11
20100 IF(K.GT.YED)GO TO 423
20200 RJJ(K)=RN(L+K)
20300 GO TO 422
20400 423 RJJ(K)=0
20500 422 CONTINUE
20600 RJJ2=RN(L)
20700 IF(IGO.GT.0)GO TO 4231
20800 C NO BOX WHEN IN GROUP EDIT ROUTINE
20900 IBOX=I
21000 RBOX=RJJ2
21100 CALL BOX(IBOX,RBOX,STFF)
21200 4231 ITEM=ITEM+1
21300 ST2=WDS(ITEM)
21400 GO TO 55
21500
21600 5517 IF(JA.EQ.0)GO TO 6221
21650 5518 X=100-JA
21675 IF(X)JA=JA/100
21700 IF(JA.EQ.2)GO TO 7221
21800 IF(JA.GE.22)GO TO 55
21805 I1=JA-2
21810 IF(X)GO TO 224
21900 RJJ(I1)=R2
22100 GO TO 6222
22110 224 RJJ(I1)=RJJ(I1)+R2
22120 GO TO 6222
22200
22300 7555 CALL MOVER
22400 IF(R3.EQ.99)GO TO 59
22405 CP IF(R3.EQ.99)GO TO 5504
22500 C 99=BACKUP OUT OF MOVER ETC.
22600 IGO=0
22605 JFONT=0
22607 C SO IT WON'T DO ALL FONT LOOKUPS.
22610 8853 IF(JJ2)GO TO 5505
22700 M=PWDS(JJ2)
22800 I=PWDS(ITEM+1)
22900 ITEM=JJ2-1
23000 ST2=WDS(JJ2)
23100 C SO IT DOESN'T HAVE TO GO THROUGH ALL ITEMS
23200 GO TO 8852
23300
23400 CP8851 IF(I1.NE.IP)GO TO 85
23500 CP GO TO 6531
23600
23700 420 REDIT=0
23800 211 IF(R2.NE.0)GO TO 320
23900 IF(KED.GE.0)RLINE=RJ3
24000 CC R3=RLINE
24025 RJ3=RLINE
24050 CC X=0
24062 GO TO 6222
24100 C FOR '55' ALIGNING
24110 7221 IF(X)GO TO 4223
24200 RJJ2=R2
24210 GO TO 6222
24220 4223 RJJ2=R2+RJJ2
24300 CC6222 IF(JQ(1).EQ.0)GO TO 6221
24400 C ARRAYS NEED 2O LOCATIONS HERE.
24500 C CHNG PARAMS WITH PAIRS OF NUMS.(EG. 2,122 4,13 5,-2 ETC.)
24600 6222 DO 1222 K=1,20,2
24700 L=JQ(K)
24705 CC IF(L.EQ.0)GO TO 5223
24707 IF(L.EQ.0)GO TO 6221
24710 JA=100-L
24720 IF(JA)L=L/100
24730 C 600 2 WILL ADD 2 TO PARAM 6.
24740 RD=RJQ(K+1)
24745 X=L-2
24750 IF(JA.GT.0)GO TO 223
24760 IF(L.EQ.2)GO TO 1223
24770 RD=RJJ(X)+RD
24780 GO TO 2223
24790 1223 RD=RJJ2+RD
24800 223 IF(L.EQ.2)GO TO 3223
24810 2223 RJJ(X)=RD
24820 GO TO 1222
24830 3223 RJJ2=RD
25300 1222 CONTINUE
25400 C*** LOOP SET TO 11 (20 IN ARRAY!) ONLY 13 PARAMS POSSIBLE NOW.
25450 CC5223 R2=RJJ2
25500 6221 DO 5514 K=1,11
25600 RJQ(K)=RJJ(K)
25700 5514 JQ(K)=RJQ(K)
25750 R2=RJJ2
25800 JA=JJA
25900 ITEM=ITEM-1
26000 IF(ITEM)ITEM=0
26100 ST2=WDS(ITEM+1)
26200 I=PWDS(ITEM+1)
26300 CALL DPYNEW
00100 60 J2=R2
00200 RSTJ2=RSTFAC(J2)
00300 CL RD=0
00400 IF(JA.NE.2)GO TO 163
00500 CJ IF(R9.EQ.0)GO TO 163
00510 IF(R8.EQ.0)GO TO 163
00520 IF(R8.EQ.-1)GO TO 163
00530 C R8=0=AS IS; -1=WHOLE REST; >0=NUMBER OVER REST; -2=CENTERED
00600 K=ITEM
00700 C ITEM+1 IS CURRENT ITEM IN QUICK RUN-THROUGHS.
00800 IF(X22.NE.0)K=X22-1
00805 RD=1.75*RSTJ2
00810 L=PWDS(K+2)
00815 IF(RN(L+1).NE.4)GO TO 164
00817 C GO ON IF NEXT ISN'T BAR LINE (CODE 4. COULD FIND OTHER LINES!!)
00820 RB=RN(L+3)
00830 L=PWDS(K)
00840 C CHECK PREV. AND NEXT ITEM. IF NOT BAR, DON'T TRY TO CENTER!
00860 IF(RN(L+1).NE.4)GO TO 164
00960 RA=RN(L+3)
01200 R3=RA+(RB-RA)/2-1.75*RSTJ2
01300 164 IF(PLT.EQ.0)GO TO 160
01400 RN(IFIX(PWDS(K+1))+3)=R3
01500 C ******* A DANGEROUS PLACE. KEEP TRACK OF THIS
01600 GO TO 5541
01700
01800 163 IF(JA.EQ.16)GO TO 63
01900 IF(PLT.NE.0)GO TO 5541
02000 IF(JA.NE.8)GO TO 70
02100 IF(R9.NE.1)GO TO 70
02200 R9=RN(MEDIT+9)
02250 RD=R9
02300 IF(R9.NE.' ')TYPE 427,R9
02400 TYPE 21
02500 ACCEPT FA5,R9
02550 IF(R9.EQ.' ')R9=RD
02600 CC IF(R9.EQ.'0')R9=0
02700 C WHEN P9=1 ASKS FOR ID NAME FOR THE STAFF (FOR PART EXTRACTOR)
02800 70 IF(JA.NE.11)GO TO 160
02900 C ↑↑↑↑ WAS - TO 63
03000 IF(J10.NE.1)GO TO 62
03050 L=NJR
03100 TYPE 21
03200 ACCEPT FA5,NJR
03300 C P10←1 GETS NAME OF BASIC DRAW FILE, PUTS IT IN P10 (NJR)
03350 IF(NJR.EQ.LY(1))NJR=L
03400 LASTNM=NJR
03500 62 IF(NJR.EQ.0)NJR=LASTNM
03600 C IF NO NAME ASKED FOR, IT TAKES LAST NAME GIVEN.(SOLVES SORT PROB?)
03700 GO TO 160
03800 CC63 IF(JA.EQ.50)JA=16
03900 C ABOVE SHOULD BE TAKEN OUT AT SOME FUTURE DATE. (12/73)
04000 CL63 IF(R3.LT.1000)GO TO 66
04100 CL RD=R3
04200 CL IF(JA.EQ.5)R13=R3/1000.
04300 CL CALL RNOTE(R3)
04400 C IF R3>1000 IT FINDS TRUE R3 THROUGH NOTE NUMB.
04500 CL66 IF(JA.NE.16)GO TO 160
04600 CX63 IF(JA.NE.16)GO TO 160
04700 C USE P10≠0 TO LINK UP TEXT.
04800 CCZZZZZZ IF(J10.EQ.0.OR.PLT.NE.0)GO TO 160
04900 63 IF(J10.EQ.0)GO TO 162
05000 CX R10=0
05100 L=ITEM
05200 IF(X22.NE.0)L=X22-1
05300 IF(J10.EQ.1)GO TO 263
05400 C NEXT FOR CENTERING OF TEXT. P10>1
05500 RB=0
05600 X=PWDS(L+1)
05700 363 L=L+1
05800 K=PWDS(L)
05900 RB=RB+RN(K+9)
06000 C ADD SPACE NEEDED
06100 K=PWDS(L+1)
06200 IF(RN(K+1).NE.16)GO TO 463
06300 IF(RN(K).EQ.8)GO TO 363
06400 C GO BACK IF MORE LETTERS TO COME
06500 463 R3=R10-(RB-3.4)*R5*RSTJ2/2.
06600 C +3.4 IS TO COMPENSATE FOR STARTING POS. BEING IN CENTER OF LET.
06700 R10=0
06800 IF(RN(X).EQ.8)RN(X+10)=0
06900 RN(X+3)=R3
07000 C THESE ARE NEEDED FOR ITEMS CENTERED DIRECTLY FROM 'WORDS'
07100 GO TO 162
07200 263 K=PWDS(L)
07300 R3=R5*RSTJ2*RN(K+9)+RN(K+3)
07400 RN(IFIX(PWDS(L+1))+3)=R3
07500 C PUTS POS. BACK INTO RN ARRAY EVERY TIME.
07600 C PUTS 13TH(+) LETTER IN RIGHT POS.
07700 162 IF(PLT.NE.0)GO TO 5541
07800 CX160 IF(EDX.NE.0)GO TO 162
07900 CP IF(I1.EQ.IP)GO TO 5541
08000 CX162 RJ3=R3
08100 160 RJ3=R3
08200 JJA=JA
08300 IF(R8.NE.0)GO TO 161
08400 IF(JA.EQ.1)R8=999.
08500 C 999=0 FOR STEM EXTENSIONS.
08600 CL161 CNT=1
08700 CL DO 5543 K=1,9
08800 C 10/6/73 ABOVE WAS ,11
08900 CL RA=RJQ(K)
09000 CL IF(RA.NE.0)CNT=K
09100 CL5543 RJJ(K)=RA
09200 C USES ONLY 10 PARAMETERS BEYOND JA, J2
09300 161 CALL MSSLUP
09400 CP2554 IF(PLT.NE.0)GO TO 5541
09500 IF(JA.EQ.6)CALL HOMER
09600 IF(JA.NE.13)GO TO 1261
09700 IF(J6.NE.0)R13=-1
09800
09900 1261 IF(R13.EQ.0)GO TO 261
10000 CALL HOMER
10100 IF(JA.EQ.10)R3=R3+RSTJ2
10200 C ABOVE HELPS CENTER NUMBERS UNDER NOTES(BECAUSE R3 IS AT CENTR OF NUM)
10300 C IF P13≠0 ANY ITEM WILL LINE UP WITH ANY OTHER ITEM. P13 IS RESET=0
10400 C **** FOR '0' EDITS ******
10500 CL261 RN(I)=CNT
10600 CL RN(I+1)=JA
10700 CL I=I+2
10800 CL RN(I)=R2
10900 CL IF(RD.NE.0)RN(I)=RD
11000 C TO SAVE NOTE NUMBS IN P2.
11100 CL DO 4554 K=1,CNT
11200 CL4554 RN(I+K)=RJQ(K)
11300 CL3554 I=CNT+1+I
11400 261 CALL LUP2
11500 5541 IF(DP(J2))GO TO 57
11600 C*** 3/74 NEW DP SYSTEM
11700 C WHAT ABOUT EDITS?*******
11800 POS=STFF(J2)
11900 J3=ROFF(RHORZ(R3))
12000 C LINE IS DIVIDED INTO 200 POINTS.
12100 CALL CENTX
12200 C SETS VERT.(CENTR) POSITION BASED ON STAFF AND R4
12300 R3=J3
12400 IF(JA.LE.2)GO TO 11
12500 551 GO TO(1,1,68,25,67, 25,116,125,11,69, 68,67),JA
12600 GO TO (116,81,80),JA-15
12700 C FOR 16,17,18 (WORDS, KSIG, METER)
12800
12900 222 I=PWDS(ITEM+1)
13000 GO TO 5505
13100 C 44 1; JFONT=ONE DISPLAYS FONTS - THIS ALSO CATCHES SOME TYPOS
13200
13300 69 CALL MAKNUM(R5)
13400 GO TO 57
13500
13600 68 CALL CLEFS
13700 GO TO 57
13800
13900 67 CALL SLUR
14000 GO TO 57
14100
14200 116 CALL ALPHA
14300 GO TO 57
14400
14500 81 CALL KSIG
14600 GO TO 57
14700
14800 80 CALL METER
14900 GO TO 57
15000
15100 61 CALL HOMER
15200 GO TO 8853
15300 125 IF(R2.EQ.0)RMOV=R8
15400 25 CALL ITMSUB
15500 C BAR LINES, BEAMS, STAFF LINES ****
15600 GO TO 57
15700
15800 C TO GET DISPLAY: 'G'; 'GM' ADDS TO DPY;
15900 120 IF(I.EQ.1)GO TO 1220
16000 IF(I2.NE.IM)GO TO 222
16100 C 'GM'=GET MORE
16200 1220 CALL FORMAT(NAME)
16300 C NOW TYPE 'G NAME' OR 'GM NAME'
16400 IF(NAME.NE.IBL)GO TO 1221
16500 1225 TYPE 21
16600 ACCEPT FA5,NAME
16700 IF(NAME.EQ.'99')GO TO 5505
16800 IF(NAME.EQ.IBL)GO TO 2220
16900 1221 IF(LOOKD(NAME).EQ.0)GO TO 1225
17000 C FUNC. LOOKD IS 'FAIL' PROG. TO CHECK ON LOOKUPS
17100 2220 JA=-1
17200 C -1 IS FOR 8852+3
17300 3005 REWIND 21
17400 C GUARDS AGAINST LOSSAGE!
17500 CP PLOTIT=-1
17600 CP IF(I1.NE.IG)PLOTIT=-2
17700 2005 IF(NAME.EQ.IBL)GO TO 2200
17800 CALL IFILE(21,NAME)
17900 C JUMP TO READ BIG FILES
18000 2200 J=ITEM+1
18100 2202 READ(21,END=2207),X,Y,
18200 1 (PWDS(K),K=J,X+J),(RN(K),K=I,Y+I-2),ISCR,(V(K),K=1,ISCR),
18300 1 LCNT,(LIST(K),K=1,LCNT),RSTFAC,STFF,RPOS
18400 C (K) BUG IN FORTRAN UNFORMATTED READ-WRITE. SOMETIMES LAST ITEMS WRONG.
18500 2207 ITEM=ITEM+X
18600 IF(I2.EQ.IM)GO TO 2203
18700 I=Y
18800 CPPPPP 8851 IS NOW 85
18900 READ(21,END=85),RSTFAC,STFF
19000 CC IF(I1.EQ.IP)GO TO 6531
19100 CPPPPP 8851 IS NOW 85
19200 22222 READ(21,END=85),ST2,(ST(K),K=1,ST2+2),(WDS(K),K=1,ITEM+1)
19300 CALL DPYNEW
19400 GO TO 5505
19500
19600 2203 RA=I-1
19700 DO 2204 K=J,J+X
19800 2204 PWDS(K)=PWDS(K)+RA
19900 GO TO 85
20000 CP121 IF(PLOTIT.EQ.0)GO TO 5504
20100 CP5121 CALL PLTSRT
20200 M=IX
20300 C IF P5=0 MOVES UP AT START, IF P6=0 MOVES UP AT END.
20400 CC PLT=-1-J8
20500 CP PLT=-1
20600 C (J8) P8=1 OR 2 FOR 2-PASS PLOTS
20700 CC M=I
20800 CC I=I+M-1
20900 C M IS SET UP IN PLTSRT
21000 CP CALL NOZERO(R2)
21100 CP DIS=R2*1.24
21200 CP IF(R3.EQ.0)R3=R2
21300 CP RHT=R3*1.2
21400 C 1.24 AND 1.2 ARE TO FIT 8 1/2 X 11 FORMAT
21500 CP BOT=-BOT*RHT
21600 CP IF(TOP2.EQ.-999)GO TO 8121
21700 CP BOT=BOT+TOP2
21800 CP GO TO 9121
21900 CP8121 CALL PLOTS(K)
22000 CP RNOMOV=0
22100 CP9121 IF(R7.EQ.0)R7=RMOV
22200 C RMOV HAS INCHES FROM P8 OF STAFF 0.
22300 CP IF(RNOMOV.GT.1)BOT=RNOMOV
22400 CP RNOMOV=R6+R7*200.*R3
22500 CC RNOMOV=R6+R7*202.*R3
22600 CP RMOV=0
22700 C R6=1 FOR NO MOVE AT END. R7=INCHES TO MOVE FOR NEW STAFF 0.
22800 C RE. R7:DISTANCE IS MEASURED FROM BOTTOM LINE OF STANDARD POSITION
22900 C OF STAFF 0 UP TO LOWEST!! POINT FOUND IN FOLLOWING FILE. THEN
23000 C NEXT SHIFT IS AGAIN FROM STANDARD STF.0 TO NEXT FILE'S LOW POINT.
23100 CP IF(J5.NE.0)GO TO 6120
23200 CP6121 CALL PLOT(0,BOT,-3)
23300 C MOVES PLOTTER UP IF P5=0.
23400
23500 C NEXT RUNS THROUGH DATA WITH NEW CHANGES.
23600 6120 IF(M.GE.I)GO TO 7120
23700 CALL RUNTHR(M)
23800 CF CNT=RN(M)
23900 C CLEARS INPUT ARRAY, USES ONLY 12 PARAMS.
24000 CF DO 6220 K=CNT+1,10
24100 CF JQ(K)=0
24200 CF6220 RJQ(K)=0
24300 CF JA=RN(M+1)
24400 CF M=M+2
24500 CF R2=RN(M)
24600 CF DO 9120 K=1,CNT
24700 CF RJQ(K)=RN(M+K)
24800 CF9120 JQ(K)=RJQ(K)
24900 CF M=CNT+M+1
25000 IF(EDX.LE.0)GO TO 60
25100 GO TO 5505
25200
25300 7120 M=1
25400 CP IF(EDX)GO TO 71201
25500 IF(PLT.EQ.1)EDX=-1
25600 PLT=0
25700 GO TO 5505
25800 CP71201 X=50*RHT
25900 CP TOP=TOP*RHT+X
26000 CP IF(RNOMOV.NE.0)TOP=0
26100 CP IF(RNOMOV.GT.1)TOP=RNOMOV
26200 CP CALL PLOT(0,TOP,3)
26300 CP TOP2=TOP
26400 CP GO TO 2
26500 C TO MOVE 'PLOTTER' FOR XGP OUTPUT
26600 CC7121 CALL PLOT(0,TOP,3)
26700 C MOVES PLOTTER UP
26800 C ALWAYS START PLOT WITH BOTTOM UNIT ON PAGE AND WORK UP.
26900 CC TOP2=TOP
27000 CC GO TO 2
27100
27200 56 FORMAT(/1XA5,' TYPE FOR ITEM #',I3,I,I6/)
27300 1 FORMAT(I,24F)
27400 21 FORMAT(' FILE NAME? '$)
27500 END